#include <stdio.h>
//一、写代码将三个整数按从大到小的顺序输出。
//①那么首先，必须要输入三个值。
//其次是得到三个数的大小关系。
//int main() {
//    int a = 0,b = 0,c = 0;
//    scanf("%d %d %d",&a,&b,&c);
//    if(a >= b && a >= c){
//        if(b >= c)
//            printf("%d %d %d",a,b,c);
//        else
//            printf("%d %d %d",a,c,b);
//    }else if(b >= a && b >= c){
//        if(a >= c)
//            printf("%d %d %d",b,a,c);
//        else
//            printf("%d %d %d",b,a,c);
//    }else{
//        if(a >= b)
//            printf("%d %d %d",c,a,b);
//        else
//            printf("%d %d %d",c,b,a);
//    }
//    return 0;
//}


//二、写一个代码打印1-100之间所有3的倍数的数字。
//int main()
//{
//    int i = 1,count = 0;
//    for(i = 1;i <= 100;i++)
//    {
//        if(i % 3 == 0)
//        {
//            printf("%d ",i);
//            count++;
//        }
//    }
//    printf("\n%d\n",count);
//    return 0;
//}
//三、给定两个数，求两个数的最大公约数。
//最大公约数：肯定不会超过其中一个数，那么就可以拿两个数之间的较小的一个数开始相除，如果都能同时整除，那这个数就是它们的最大公约数。如果不行，则该数-1，并以此相除，直到找到为止。这样就既包含了1，也不会漏掉其它数。
//注意事项：①要设置一个中间值（媒介）把较小的数赋值给它，让它进行变化，因为待求取的样本是不能进行变化的。
//②判断条件是：要比0大，而不是<=1;③找到后立即跳出循环，不要做无意义的事。


//三、编写程序找出1-100之间含有9的数字,且算出有多少个9.
//int main()
//{
//    int a = 0;
//    int b = 0;
//    for(a = 1;a <= 100;a++)
//    {
//        if(a % 10 == 9 || a / 10 == 9)
//        {
//            printf("%d ",a);
//            b++;
//            if(a == 99)
//                b+=1;
//        }
//    }
//    printf("\n%d",b);
//    return 0;
//}
////int main()
////{
////    int a = 0;
////    int b = 0;
////    for(a = 1;a <= 1000;a++)
////    {
////        while(a < 100)//分情况讨论
////        {
////            if(a % 10 == 9 || a / 10 == 9)//个位数和十位数是9的数
////            {
////                printf("%d ",a);
////                b++;
////                if(a == 99)
////                    b+=1;
////            }
////            a++;
////        }
////        while(100 < a && a <=1000)
////        {
////            if(a % 100 == 9 || (a%10)%10 == 9 || a/100 == 9)//个位数、十位数和百位数是9的数
////            {
////                printf("%d ",a);
////                b++;
////                if(a % 100 == 9 && (a%10)%10 == 9)
////                    b+=1;
////                else if(a == 999)
////                    b+=1;
////            }
////            a++;
////        }
////    }
////    printf("\n%d",b);
////    return 0;
////}


////四、分数求和。计算1/1-1/2+1/3-1/4+...-1/100的和。
////直接分类：1+1/3+1/5+...+1/99;-(1/2+1/4+1/6+...+1/100).
//int main()
//{
//    int i = 0;
//    double b = 0.0;
//    double c = 0.0;
//    for(i = 1;i <= 99;i+=2)
//    {
//        b = (1.0/i) + b;
//    }
//    for(i = 2;i <= 100;i+=2)
//    {
//        c = (1.0/i) + c;
//    }
//    printf("%lf\n",b);
//    printf("%lf\n",c);
//    printf("%lf\n",b-c);
//    return 0;
//}


////五、求10个整数中的最大值。
////借一个值进行比较
////到底这个数组输入的时候应该怎样才能全部记录我的数字？
//int main()
//{
//    int arr[10] = {0};
//    int a = 0;
//    for(a = 0;a <= 9;a++)
//    {
//        scanf("%d",&arr[a]);
//    }
//    int i = 0, max = arr[0];
//    for(i = 1;i <= 9;i++)
//    {
//        if(arr[i] >= max)
//            max = arr[i];
//    }
//    printf("%d\n",max);
//    return 0;
//}







////六、在屏幕上打印9*9乘法表
//int main()
//{
//    int i = 0,j = 0;
//    for(i = 1;i <= 9;i++)
//    {
//        for(j = 1;j <= i;j++)
//        {
//            if(j == 1 && j < i)
//            {
//                printf("\n");
//            }//解决这个换行问题
//            printf("%d*%d=%-2d ",i,j,i*j);
//        }
//        //printf("\n");、、这种也可以，很巧妙。
//    }
//    return 0;
//}

////七、猜随机数。
////1.利用电脑时间戳自动生成随机数，并限制范围；2、if()语句进行判断，如果大了，显示大了；如果小了；显示小了；刚刚好则“恭喜猜对”。
////3.还要搞个循环，直到猜对了。
//#include <time.h>
//#include <stdlib.h>
//void menu()
//{
//    printf("*********Please select.*********\n");
//    printf("*************1.Play*************\n");
//    printf("*************2.Exit*************\n");
//}
//void game()
//{
//    int guess = 0;
//    int random = rand()%100+1;
//    int i = 0;
//    printf("Please inport the number:");
//    scanf("%d",&guess);
//    while(guess != random)
//    {
//        if(guess > random)
//        {
//            printf("It is too much.Please retype:");
//            scanf("%d",&guess);
//        }
//        else if(guess < random)
//        {
//            printf("It is too small.Please retype:");
//            scanf("%d",&guess);
//        }
//    }
////    printf("You win.\n");
//    if(guess == random)
//        printf("You win.\n");
//}
//int main()
//{
//    int choice = 0;
//    srand((unsigned int)time(NULL));
//    do
//    {
//        menu();
//        scanf("%d",&choice);
//        switch(choice)
//        {
//            case 1:
//                game();
//                break;
//            case 2:
//                printf("Bye.\n");
//                break;
//            default:
//                printf("Don't naughty.\n");
//                break;
//        }
//    }
//    while(choice == 1 || choice == 2);
//
//
//    return 0;
//}



////第七题、实现一个函数来交换两个整数的内容。
////改变数值，传址调用。
//void Swap(int* pa,int* pb)
//{
//    int z = *pa;
//    *pa = *pb;
//    *pb = z;
//}
//int main()
//{
//    int a = 0;
//    int b = 0;
//    scanf("%d %d",&a,&b);
//    Swap(&a,&b);
//    printf("a=%d,b=%d",a,b);
//    return 0;
//}

//第八题：实现一个函数，打印乘法口诀表，口诀表的行数和列数由自己指定。
//如：输入9，打印9*9口诀表；输入12，打印12*12口诀表。
void Table(int n)
{
    int i = 0;
    int j = 0;
    for(i = 1;i <= n;i++)
    {
        for(j = 1;j <= i;j++)
        {
            printf("%d*%d=%2d ",i,j,i*j);
        }
        printf("\n");
    }
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    Table(n);
    return 0;
}